package cn.com.aiouyi.common;

import cn.com.aiouyi.util.SpringUtils;
import lombok.Getter;
import lombok.Setter;

/**
 * 消息
 * @author hanson
 */
@Getter
@Setter
public class Message {

	/** 默认成功消息 */
	public static Message SUCCESS = Message.success();
	/** 默认错误消息 */
	public static Message ERROR = Message.error();

	public static final String CODE_SUCCESS = "0000";
	public static final String CODE_WARN = "0001";
	public static final String CODE_ERROR = "0002";
	public static final String CODE_NOT_LOGIN = "0003";
	public static final String CODE_NO_AUTHORIZED = "0004";
	public static final String CODE_INVALID_PARAMS = "0005";
	public static final String CODE_EXIST = "0006";
	public static final String CODE_NOTEXIST = "0007";
	public static final String CODE_SITE_CLOSE = "0008";
	public static final String CODE_RESOURCE_NOT_FOUND = "0009";
	public static final String CODE_ILLEGAL_LICENSE = "0010";
	public static final String CODE_LOGIN_FAILURE = "0011";
	public static final String CODE_LOGIN_EXPIRE = "0012";


	/** 通用业务错误（抛出此代码时，前台显示错误信息） */
	public static final String CODE_BUSSINESS_ERROR = "3000";

	/** 通用系统错误（抛出此代码时，前台不会显示错误信息，只会提示系统错误和错误代码） */
	public static final String CODE_SYSTEM_ERROR = "5000";

	/**
	 * 类型
	 */
	public enum Type {

		/** 成功 */
		success,

		/** 警告 */
		warn,

		/** 错误 */
		error
	}

	/** 类型 */
	private Message.Type type;

	/** 内容 */
	private String content;
	
	/** 数据 */
	private Object data;

	/**
	 * 构造方法
	 */
	public Message() {
	}

	/**
	 * 构造方法
	 * @param type 类型
	 * @param content 内容
	 */
	public Message(Message.Type type, String content) {
		this.type = type;
		this.content = SpringUtils.getMessage(content);
	}

	/**
	 * 构造方法
	 * @param type 类型
	 * @param content内容
	 * @param args 参数
	 */
	public Message(Message.Type type, String content, Object... args) {
		this.type = type;
		this.content = SpringUtils.getMessage(content, args);
	}
	
	/**
	 * 返回默认成功消息
	 * @return
	 */
	public static Message success(){
		return new Message(Type.success, "common.message.success");
	}
	
	/**
	 * 返回成功消息
	 * @param content 内容
	 * @param args 参数
	 * @return 成功消息
	 */
	public static Message success(String content, Object... args) {
		return new Message(Message.Type.success, content, args);
	}
	
	/**
	 * 返回成功消息和数据
	 * @param data 数据
	 * @return
	 */
	public static Message successData(Object data){
		Message message = new Message();
		message.type = Message.Type.success;
		message.data = data;
		return message;
	}
	
	/**
	 * 返回成功消息和数据
	 * @param content
	 * @param data
	 * @return
	 */
	public static Message successData(String content, Object data){
		Message message = new Message();
		message.type = Message.Type.success;
		message.content = SpringUtils.getMessage(content);
		message.data = data;
		return message;
	}

	/**
	 * 返回警告消息
	 * @param content 内容
	 * @param args 参数
	 * @return 警告消息
	 */
	public static Message warn(String content, Object... args) {
		return new Message(Message.Type.warn, content, args);
	}

	/**
	 * 返回错误消息
	 * @return
	 */
	public static Message error(){
		return new Message(Type.error, "common.message.error");
	}
	
	/**
	 * 返回错误消息
	 * @param content 内容
	 * @param args 参数
	 * @return 错误消息
	 */
	public static Message error(String content, Object... args) {
		return new Message(Message.Type.error, content, args);
	}

	/**
	 * 重写toString方法
	 * @return 字符串
	 */
	@Override
	public String toString() {
		return SpringUtils.getMessage(content);
	}

}